1、?:
非获取匹配
(?:x)
匹配x但是不会捕获,不会 $n
获取到(与()
有区别),但是可以被替换
-
(?:x)
只匹配,不获取 -
()
可以匹配,也可以被获取
'JavaScript is fun'.replace(/([Jj]ava)(?:[Ss]cript)/,"$2"); // "$2 is fun" 获取不到第二个括号内匹配的值
'JavaScript is fun'.replace(/([Jj]ava)([Ss]cript)/,"$2"); // 'Script is fun'
2、?=
和 ?!
-
x(?=y)
只有当 x 后面紧跟着 y 时,才匹配 x -
x(?!y)
只有当 x 后面不紧跟着 y 时,才匹配 x
相似点:两者都不是匹配结果的一部分,既不会被替换掉(和?:
区别),也不可以被$n
获取到(和?:
一样)
// ?= 和 ?! 区别
'a.jpg,a.png,a.gif,a.jpg'.replace(/a(?!\.jpg)/g, '*'); // "a.jpg,*.png,*.gif,a.jpg"
'a.jpg,a.png,a.gif,a.jpg'.replace(/a(?=\.jpg)/g, '*'); // "*.jpg,a.png,a.gif,*.jpg"
// ?: 和 ?= 区别
"JavaScript is fun".replace(/([Jj]ava)(?:[Ss]cript)/,"$1"); // "Java is fun"
"JavaScript is fun".replace(/([Jj]ava)(?=[Ss]cript)/,"$1"); // "JavaScript is fun"
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。